package demo3;

import java.lang.reflect.Field;

public class Demo {

    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
        //学习通过class对象获得成员变量

        //获取class字节码文件的对象
        Class clazz = Class.forName("demo3.Student");

        //获取共有的成员变量
        Field[] f1 = clazz.getDeclaredFields();
        for (Field field : f1) {
            System.out.println(field);
        }
        System.out.println("---------");

        //获取单个变量
        Field f2 = clazz.getDeclaredField("name");
        System.out.println(f2);

        //获得当前变量的权限修饰符
        int modifiers = f2.getModifiers();
        System.out.println(modifiers);//2

        //获取成员变量的名字
        String name = f2.getName();
        System.out.println(name);//name

        //获取当前成员便变量的类型
        Class type = f2.getType();
        System.out.println(type);//class java.lang.String
        System.out.println("--------------");
        //获取成员变量的值，要先创建对象
        Student stu = new Student("张三", 23,"男");
        //对于私有的成员变量要先进行暴力反射
       f2.setAccessible(true);
        String value = (String) f2.get(stu);
        System.out.println(value);
        System.out.println(stu);
        //修改对象记录的值
        f2.set(stu,"chen");
        System.out.println(stu);
    }
}
